home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 10 / FM Towns Free Software Collection 10.iso / ms_dos / tool / dprint / errtrap.c < prev    next >
Text File  |  1994-08-11  |  2KB  |  105 lines

  1. /*
  2.  
  3. 8086|Printman/POSTCARD エラー対策ルーチン
  4. Copyright (c) 1993,94 Delmonta
  5.  
  6. */
  7.  
  8. #include"dprint.h"
  9. #include<conio.h>
  10. #include<dos.h>
  11. #include<signal.h>
  12.  
  13. /*---------------------------------------------------------------------------*/
  14.  
  15. enum    PRNHERR    prn_harderr(void)
  16. {
  17. prnherr_rep:
  18.     switch(dp_errmes("プリンタエラーです A:中止/R:再試行/I:無視して続行 "))
  19.     {
  20.     case 'A':
  21.     case 'a':
  22.     case 'F':    /* 本来はAbortではなくFailなので、Fキーも受け付ける */
  23.     case 'f':
  24.         return PRNHERR_FAIL;
  25.     case 'R':
  26.     case 'r':
  27.         return PRNHERR_RETRY;
  28.     case 'I':
  29.     case 'i':
  30.         return PRNHERR_IGNORE;
  31.     default:
  32.         putchar('\7');
  33.         goto prnherr_rep;
  34.     }
  35. }
  36.  
  37. /*---------------------------------------------------------------------------*/
  38.  
  39. static int far    dp_dosharderr(deverr,errcode,devhdr)
  40. unsigned    deverr,errcode,far *devhdr;
  41. {
  42.     static    char    *errname[13] = 
  43.     {
  44.         "書き込み禁止です",
  45.         "存在しないユニットです",
  46.         "準備ができていません",
  47.         "デバイスの要求が違います",
  48.         "CRCエラーです",
  49.         "デバイスの要求パラメータが違います"
  50.         "シークエラーです",
  51.         "存在しないメディアタイプです",
  52.         "セクタが見つかりません",
  53.         "プリンタ用紙切れです",
  54.         "書き込みに失敗しました",
  55.         "読み込みに失敗しました",
  56.         "ディスクエラーです",
  57.     };
  58.  
  59.     char    c;
  60.  
  61.     if    (errcode > 12)
  62.         errcode = 12;
  63.  
  64. harderr_rep:
  65.                         /* printf()は使えない */
  66.     cprintf("\033[%d;1f\033[33m\007%s A:中止/ R:再試行/I:無視して続行 ",
  67.                     ERRMES_LINE,errname[errcode&0xff]);
  68.  
  69.     c = dp_getch();
  70.  
  71.     cprintf("\033[2K");
  72.  
  73.     switch    (c)
  74.     {
  75.     case 'A':
  76.     case 'a':
  77.     case 'F':    /* 元々AbortではなくFailなので、Fキーも受け付ける */
  78.     case 'f':
  79.         return _HARDERR_FAIL;
  80.     case 'R':
  81.     case 'r':
  82.         return _HARDERR_RETRY;
  83.     case 'I':
  84.     case 'i':
  85.         return _HARDERR_IGNORE;
  86.  
  87.     case EXTKEY_H:
  88.         dp_getch();        /* このままbreakせずに下に進む */
  89.     default:
  90.         putch('\7');
  91.         goto harderr_rep;
  92.     }
  93. }
  94.  
  95. /*---------------------------------------------------------------------------*/
  96.  
  97. void    dp_seterrhandler(void)
  98. {
  99.     freopen("con","r",stdin);    /* リダイレクトを抑止する */
  100.     freopen("con","w",stdout);
  101.  
  102.     signal(SIGINT,SIG_IGN);
  103.     _harderr(dp_dosharderr);
  104. }
  105.